{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "pQwmBz1GumJR"
   },
   "source": [
    "<a href=\"https://colab.research.google.com/github/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_3_transfer_nlp.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "KBQzVEtJumJT"
   },
   "source": [
    "# T81-558: Applications of Deep Neural Networks\n",
    "**Module 9: Transfer Learning**\n",
    "* Instructor: [Jeff Heaton](https://sites.wustl.edu/jeffheaton/), McKelvey School of Engineering, [Washington University in St. Louis](https://engineering.wustl.edu/Programs/Pages/default.aspx)\n",
    "* For more information visit the [class website](https://sites.wustl.edu/jeffheaton/t81-558/)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Cwz1jhRaumJU"
   },
   "source": [
    "# Module 9 Material\n",
    "\n",
    "* Part 9.1: Introduction to Keras Transfer Learning [[Video]](https://www.youtube.com/watch?v=AtoeoNwmd7w&list=PLjy4p-07OYzulelvJ5KVaT2pDlxivl_BN) [[Notebook]](https://github.com/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_1_keras_transfer.ipynb)\n",
    "* Part 9.2: Keras Transfer Learning for Computer Vision [[Video]](https://www.youtube.com/watch?v=nXcz0V5SfYw&list=PLjy4p-07OYzulelvJ5KVaT2pDlxivl_BN) [[Notebook]](https://github.com/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_2_keras_xfer_cv.ipynb)\n",
    "* **Part 9.3: Transfer Learning for NLP with Keras** [[Video]](https://www.youtube.com/watch?v=PyRsjwLHgAU&list=PLjy4p-07OYzulelvJ5KVaT2pDlxivl_BN) [[Notebook]](https://github.com/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_3_transfer_nlp.ipynb)\n",
    "* Part 9.4: Transfer Learning for Facial Feature Recognition [[Video]](https://www.youtube.com/watch?v=uUZg33DfCls&list=PLjy4p-07OYzulelvJ5KVaT2pDlxivl_BN) [[Notebook]](https://github.com/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_4_facial_points.ipynb)\n",
    "* Part 9.5: Transfer Learning for Style Transfer [[Video]](https://www.youtube.com/watch?v=pLWIaQwkJwU&list=PLjy4p-07OYzulelvJ5KVaT2pDlxivl_BN) [[Notebook]](https://github.com/jeffheaton/t81_558_deep_learning/blob/master/t81_558_class_09_5_style_transfer.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "WPEQF9auumJU"
   },
   "source": [
    "# Google CoLab Instructions\n",
    "\n",
    "The following code ensures that Google CoLab is running the correct version of TensorFlow."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "rUpegFqQumJV",
    "outputId": "213c9008-d443-4819-dfc6-f26be8c665f9"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: using Google CoLab\n"
     ]
    }
   ],
   "source": [
    "try:\n",
    "    %tensorflow_version 2.x\n",
    "    COLAB = True\n",
    "    print(\"Note: using Google CoLab\")\n",
    "except:\n",
    "    print(\"Note: not using Google CoLab\")\n",
    "    COLAB = False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "KtQUhDWNumJW"
   },
   "source": [
    "# Part 9.3: Transfer Learning for NLP with Keras\n",
    "\n",
    "You will commonly use transfer learning with Natural Language Processing (NLP). Word embeddings are a common means of transfer learning in NLP where network layers map words to vectors. Third parties trained neural networks on a large corpus of text to learn these embeddings. We will use these vectors as the input to the neural network rather than the actual characters of words.  \n",
    "\n",
    "This course has an entire module covering NLP; however, we use word embeddings to perform sentiment analysis in this module. We will specifically attempt to classify if a text sample is speaking in a positive or negative tone.\n",
    "\n",
    "The following three sources were helpful for the creation of this section.\n",
    "\n",
    "* Universal sentence encoder [[Cite:cer2018universal]](https://arxiv.org/abs/1803.11175). arXiv preprint arXiv:1803.11175)\n",
    "* Deep Transfer Learning for Natural Language Processing: Text Classification with Universal Embeddings [[Cite:howard2018universal]](https://towardsdatascience.com/deep-transfer-learning-for-natural-language-processing-text-classification-with-universal-1a2c69e5baa9)\n",
    "* [Keras Tutorial: How to Use Google's Universal Sentence Encoder for Spam Classification](http://hunterheidenreich.com/blog/google-universal-sentence-encoder-in-keras/)\n",
    "\n",
    "These examples use TensorFlow Hub, which allows pretrained models to be loaded into TensorFlow easily. To install TensorHub use the following commands."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "eMp-8-OIumJW",
    "outputId": "e97f541b-b98e-455c-e735-bf988555ad95"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: tensorflow_hub in /usr/local/lib/python3.7/dist-packages (0.12.0)\n",
      "Requirement already satisfied: numpy>=1.12.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow_hub) (1.19.5)\n",
      "Requirement already satisfied: protobuf>=3.8.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow_hub) (3.17.3)\n",
      "Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.7/dist-packages (from protobuf>=3.8.0->tensorflow_hub) (1.15.0)\n"
     ]
    }
   ],
   "source": [
    "# HIDE OUTPUT\n",
    "!pip install tensorflow_hub"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "1jSQ2owPumJX"
   },
   "source": [
    "It is also necessary to install TensorFlow Datasets, which you can install with the following command."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Z56Ce_B7umJX",
    "outputId": "a3fe3a71-8ed3-45ec-e60e-918e5bb38a1b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: tensorflow_datasets in /usr/local/lib/python3.7/dist-packages (4.0.1)\n",
      "Requirement already satisfied: importlib-resources in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (5.4.0)\n",
      "Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (3.17.3)\n",
      "Requirement already satisfied: attrs>=18.1.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (21.4.0)\n",
      "Requirement already satisfied: termcolor in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (1.1.0)\n",
      "Requirement already satisfied: promise in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (2.3)\n",
      "Requirement already satisfied: dill in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (0.3.4)\n",
      "Requirement already satisfied: absl-py in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (1.0.0)\n",
      "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (1.15.0)\n",
      "Requirement already satisfied: tensorflow-metadata in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (1.6.0)\n",
      "Requirement already satisfied: future in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (0.16.0)\n",
      "Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (2.23.0)\n",
      "Requirement already satisfied: tqdm in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (4.62.3)\n",
      "Requirement already satisfied: dm-tree in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (0.1.6)\n",
      "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from tensorflow_datasets) (1.19.5)\n",
      "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->tensorflow_datasets) (3.0.4)\n",
      "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->tensorflow_datasets) (1.24.3)\n",
      "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2.10)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2021.10.8)\n",
      "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.7/dist-packages (from importlib-resources->tensorflow_datasets) (3.7.0)\n",
      "Requirement already satisfied: googleapis-common-protos<2,>=1.52.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow-metadata->tensorflow_datasets) (1.54.0)\n"
     ]
    }
   ],
   "source": [
    "# HIDE OUTPUT\n",
    "!pip install tensorflow_datasets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0UgVyHXxumJY"
   },
   "source": [
    "Movie reviews are a good source of training data for sentiment analysis. These reviews are textual, and users give them a star rating which indicates if the viewer had a positive or negative experience with the movie. Load the Internet Movie DataBase (IMDB) reviews data set. This example is based on a TensorFlow example that you can [find here](https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_text_classification.ipynb#scrollTo=2ew7HTbPpCJH)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 440,
     "referenced_widgets": [
      "342c8ecc48764a19a7d84fca7cfd8b0c",
      "c187a8615f9f482d8c4ba206ba1a9634",
      "98cd785afad840fd8cbbf73c58bb6951",
      "4bf007c0b80e4c7f8139bdcf3009b26b",
      "6543a3160a9c4980a9cd2ce87e38010b",
      "799f38528b7b4236b6624591ed66002c",
      "c88defd020874e348f87c75bc649c291",
      "1480c7e9c3d64a84b7f755b014a2dc82",
      "b96b9d778cee45699e570583eb38e17f",
      "8fb2bcd3e9724845bfaf5c39b79a5651",
      "f702e622ee004e9591ac90ef231a1533",
      "5a5daadffc8642d28cb3875f78513271",
      "d665aedd6a1c4e12a312ebadf482dc00",
      "a634268e92eb4776aeaf223630411515",
      "cab71e8bb88b4a2ab0fb4d65b3800fe3",
      "8bf75a35229f48bea7786ce024330d44",
      "652ddaffcf734c43964acfbae8cfebf6",
      "07713e5d0b1b445fb54ec157515290e5",
      "19c696982b944a7a906231251992e58a",
      "a788ecbf05914d3ba723c3e36a70aba7",
      "053b0bb917ae40fd93d94628f9e4bf93",
      "59fd2e3ce54f42dd97aa95044bc99609",
      "78c16501daf448f68db6acd6ac22fe44",
      "9adf83e3d28f457ebaeac6f74a817585",
      "e1b7df5aabda4edb86db4a69db783dee",
      "30ad7760769f4042a00c07ceeae9f89c",
      "e291af334c514f50ba45bca5a3fb2356",
      "9e43efc152af43fcbc9b7b84f89ae912",
      "eb956c443ed84f5199572acab1a73b74",
      "8a0cb9329d39408b833344e751f5a762",
      "c5f0ebd1c8f84ae39cd8bb12f2f99a0d",
      "265c02017e2046bba839f947d5f20b25",
      "49b87a6af932494aaeb4bb8eb06ded2b",
      "4ddcac6e75a7443396149c931ce4f3b3",
      "377b30cf2b56445682d4e0ec9f2992c8",
      "87d16d7a0daa4fae837deb6b81da28e4",
      "fca2e9f85258474a8184ee19038dbce1",
      "3d19b848e4a54a198db10c2000748513",
      "2c9f13d821f44cae9257bdb4659cdf0e",
      "b5122c9a2b494c77992c65b5246ea9a0",
      "8e83f3c6a0624551b9209b0ef0a5376d",
      "bc45332b60ab4df8a57e17e7a0aeefa7",
      "0ab842882b1747c6a3ea9aea15af51bd",
      "e3cfe2f474b0471fa7b6d410d3b340d8",
      "ce9542b8402444b7b82f51033bc0c286",
      "bb9f2e95f6a24860b56544727377a981",
      "ebe04996d21b48f6aba2e4e178121c5b",
      "b25a6e97092f4752bccccfbb5d2ffbba",
      "e52b23daab5c4a289e37a7d07ce10125",
      "77a0ba08a0694993b1b72cfed85ce109",
      "e71f9481469f45d4a578f1ddf671551c",
      "da1193435b104e139b8de27384ab5a07",
      "3779841513a8455da892b6f396e7025c",
      "00dee0c787d34cf0ab4a12cdb329f2c9",
      "b31589e904ba48e3868d59795e28f7ff",
      "6b0946b06bc0428e8ae91155fa4a482a",
      "b0311cb873e64621ac45d6a49cc3a925",
      "2cf1271ff0c14289a7a3501e9b6061d1",
      "98f8cc568f544a579918de572117f58d",
      "0e3b1f7050384e06a8133567454c4755",
      "ad3b2411e5ff405696a38013c4a10f9e",
      "a87fe8137d4e4eca8c0ebb71ac861292",
      "dbfb59fb47ba4bff87fc82adc4df6ee5",
      "5102002f3d2947d1b85cbc85a6e0d3d0",
      "0bd507d7c5314685a633b0d943b69ef9",
      "3f115b753fbb4df592e6e2896e1a9db1",
      "279c293b01a846118b31684e451c3499",
      "cc43585368b442fcaf26c12de4fc14b2",
      "f032e8ac2dee4378a70a31a7c3b3a9f7",
      "4efb5ba39ffb4732b42b069144179a6b",
      "624b0078167b4d6684fd8dc8eecf1d9e",
      "f72d5e4b2ff24d0a808c52be57a78b93",
      "1a236aef271f4dda9cf63c01461affe9",
      "5aa17e58b6fc4f52b27493bffbbacd66",
      "a95f333d2866430a8eb5618b379ced7e",
      "4098c7a311b6424e84d9cd4ad30f51fe",
      "f741b500a0d7401497d3ebb61b90d935",
      "624ebbef587d47a7916432035e7666b6",
      "511354020ece429baf3b9c3f0be0d573",
      "aeb824b882c4461b89074fe0b90b6f28",
      "8b80de00f12549dd8e195db716240a70",
      "14d2cfab95cd4574af407dd6600034d0",
      "700fbe90ea7f4e028e1d0698ecdb560c",
      "2c8c0e6f3bb64c23beb27885f64ea306",
      "9793d24e39a04dcc8c43df759ef2a69f",
      "a6ec6e5c93224c65b03a200d36395c6d",
      "e29ed19ced0946658859bf32d2b9a25e",
      "5830dc8fecc340c4be3d8b4bfb0cb8eb"
     ]
    },
    "id": "NrZOixq-umJY",
    "outputId": "ac74b049-3050-4dc5-b491-69bc23dce46f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1mDownloading and preparing dataset imdb_reviews/plain_text/1.0.0 (download: 80.23 MiB, generated: Unknown size, total: 80.23 MiB) to /root/tensorflow_datasets/imdb_reviews/plain_text/1.0.0...\u001b[0m\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "342c8ecc48764a19a7d84fca7cfd8b0c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Dl Completed...: 0 url [00:00, ? url/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5a5daadffc8642d28cb3875f78513271",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Dl Size...: 0 MiB [00:00, ? MiB/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "78c16501daf448f68db6acd6ac22fe44",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "0 examples [00:00, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/plain_text/1.0.0.incomplete0GRP97/imdb_reviews-train.tfrecord\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4ddcac6e75a7443396149c931ce4f3b3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/25000 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ce9542b8402444b7b82f51033bc0c286",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "0 examples [00:00, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/plain_text/1.0.0.incomplete0GRP97/imdb_reviews-test.tfrecord\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6b0946b06bc0428e8ae91155fa4a482a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/25000 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "279c293b01a846118b31684e451c3499",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "0 examples [00:00, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/plain_text/1.0.0.incomplete0GRP97/imdb_reviews-unsupervised.tfrecord\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "624ebbef587d47a7916432035e7666b6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/50000 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:absl:Dataset is using deprecated text encoder API which will be removed soon. Please use the plain_text version of the dataset and migrate to `tensorflow_text`.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1mDataset imdb_reviews downloaded and prepared to /root/tensorflow_datasets/imdb_reviews/plain_text/1.0.0. Subsequent calls will reuse this data.\u001b[0m\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow_datasets/core/dataset_builder.py:598: get_single_element (from tensorflow.python.data.experimental.ops.get_single_element) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use `tf.data.Dataset.get_single_element()`.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow_datasets/core/dataset_builder.py:598: get_single_element (from tensorflow.python.data.experimental.ops.get_single_element) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use `tf.data.Dataset.get_single_element()`.\n"
     ]
    }
   ],
   "source": [
    "# HIDE OUTPUT\n",
    "import tensorflow as tf\n",
    "import tensorflow_hub as hub\n",
    "import tensorflow_datasets as tfds\n",
    "\n",
    "train_data, test_data = tfds.load(name=\"imdb_reviews\", \n",
    "                                  split=[\"train\", \"test\"], \n",
    "                                  batch_size=-1, as_supervised=True)\n",
    "\n",
    "train_examples, train_labels = tfds.as_numpy(train_data)\n",
    "test_examples, test_labels = tfds.as_numpy(test_data)\n",
    "\n",
    "# /Users/jheaton/tensorflow_datasets/imdb_reviews/plain_text/0.1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "B95Ek4cIumJZ"
   },
   "source": [
    "Load a pretrained embedding model called [gnews-swivel-20dim](https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1).  Google trained this network on GNEWS data and can convert raw text into vectors.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "6_2X_-SlumJZ"
   },
   "outputs": [],
   "source": [
    "model = \"https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1\"\n",
    "hub_layer = hub.KerasLayer(model, output_shape=[20], input_shape=[], \n",
    "                           dtype=tf.string, trainable=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "vPa3iHUoumJZ"
   },
   "source": [
    "The following code displays three movie reviews.  This display allows you to see the actual data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "HSIAeshoumJZ",
    "outputId": "646ec7e4-db4e-465b-94ab-9e03b5485493"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([b\"This was an absolutely terrible movie. Don't be lured in by Christopher Walken or Michael Ironside. Both are great actors, but this must simply be their worst role in history. Even their great acting could not redeem this movie's ridiculous storyline. This movie is an early nineties US propaganda piece. The most pathetic scenes were those when the Columbian rebels were making their cases for revolutions. Maria Conchita Alonso appeared phony, and her pseudo-love affair with Walken was nothing but a pathetic emotional plug in a movie that was devoid of any real meaning. I am disappointed that there are movies like this, ruining actor's like Christopher Walken's good name. I could barely sit through it.\",\n",
       "       b'I have been known to fall asleep during films, but this is usually due to a combination of things including, really tired, being warm and comfortable on the sette and having just eaten a lot. However on this occasion I fell asleep because the film was rubbish. The plot development was constant. Constantly slow and boring. Things seemed to happen, but with no explanation of what was causing them or why. I admit, I may have missed part of the film, but i watched the majority of it and everything just seemed to happen of its own accord without any real concern for anything else. I cant recommend this film at all.',\n",
       "       b'Mann photographs the Alberta Rocky Mountains in a superb fashion, and Jimmy Stewart and Walter Brennan give enjoyable performances as they always seem to do. <br /><br />But come on Hollywood - a Mountie telling the people of Dawson City, Yukon to elect themselves a marshal (yes a marshal!) and to enforce the law themselves, then gunfighters battling it out on the streets for control of the town? <br /><br />Nothing even remotely resembling that happened on the Canadian side of the border during the Klondike gold rush. Mr. Mann and company appear to have mistaken Dawson City for Deadwood, the Canadian North for the American Wild West.<br /><br />Canadian viewers be prepared for a Reefer Madness type of enjoyable howl with this ludicrous plot, or, to shake your head in disgust.'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_examples[:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "lK53sJ5iumJZ"
   },
   "source": [
    "The embedding layer can convert each to 20-number vectors, which the neural network receives as input in place of the actual words."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "6kr2SLKSumJa",
    "outputId": "e3b3671d-e40c-4679-8554-65866a1fa862"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: shape=(3, 20), dtype=float32, numpy=\n",
       "array([[ 1.7657859 , -3.882232  ,  3.913424  , -1.5557289 , -3.3362343 ,\n",
       "        -1.7357956 , -1.9954445 ,  1.298955  ,  5.081597  , -1.1041285 ,\n",
       "        -2.0503852 , -0.7267516 , -0.6567596 ,  0.24436145, -3.7208388 ,\n",
       "         2.0954835 ,  2.2969332 , -2.0689783 , -2.9489715 , -1.1315986 ],\n",
       "       [ 1.8804485 , -2.5852385 ,  3.4066994 ,  1.0982676 , -4.056685  ,\n",
       "        -4.891284  , -2.7855542 ,  1.3874227 ,  3.8476458 , -0.9256539 ,\n",
       "        -1.896706  ,  1.2113281 ,  0.11474716,  0.76209456, -4.8791065 ,\n",
       "         2.906149  ,  4.7087674 , -2.3652055 , -3.5015903 , -1.6390051 ],\n",
       "       [ 0.71152216, -0.63532174,  1.7385626 , -1.1168287 , -0.54515934,\n",
       "        -1.1808155 ,  0.09504453,  1.4653089 ,  0.66059506,  0.79308075,\n",
       "        -2.2268343 ,  0.07446616, -1.4075902 , -0.706454  , -1.907037  ,\n",
       "         1.4419788 ,  1.9551864 , -0.42660046, -2.8022065 ,  0.43727067]],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hub_layer(train_examples[:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "fH8nB4z5umJa"
   },
   "source": [
    "We add additional layers to classify the movie reviews as either positive or negative."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ezL-ysehumJa",
    "outputId": "6e955403-426a-41f4-a817-b29f62b17ef2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " keras_layer (KerasLayer)    (None, 20)                400020    \n",
      "                                                                 \n",
      " dense (Dense)               (None, 16)                336       \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 1)                 17        \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 400,373\n",
      "Trainable params: 400,373\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = tf.keras.Sequential()\n",
    "model.add(hub_layer)\n",
    "model.add(tf.keras.layers.Dense(16, activation='relu'))\n",
    "model.add(tf.keras.layers.Dense(1, activation='sigmoid'))\n",
    "\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3z685otDumJa"
   },
   "source": [
    "We are now ready to compile the neural network. For this application, we use the adam training method for binary classification. We also save the initial random weights for later to start over easily."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "6ACYutHrumJa"
   },
   "outputs": [],
   "source": [
    "model.compile(optimizer='adam',\n",
    "              loss='binary_crossentropy',\n",
    "              metrics=['accuracy'])\n",
    "init_weights = model.get_weights()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "G4rLPk0QumJa"
   },
   "source": [
    "Before fitting, we split the training data into the train and validation sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "aZLYInpaumJa"
   },
   "outputs": [],
   "source": [
    "x_val = train_examples[:10000]\n",
    "partial_x_train = train_examples[10000:]\n",
    "\n",
    "y_val = train_labels[:10000]\n",
    "partial_y_train = train_labels[10000:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "pY3B9wM-oruO"
   },
   "source": [
    "We can now fit the neural network. This fitting will run for 40 epochs and allow us to evaluate the effectiveness of the neural network, as measured by the training set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "EqDAQls1umJb",
    "outputId": "cdb29323-1fef-44ae-edff-34d98dd23613"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/40\n",
      "30/30 [==============================] - 4s 80ms/step - loss: 1.5554 - accuracy: 0.5515 - val_loss: 0.8048 - val_accuracy: 0.5865\n",
      "Epoch 2/40\n",
      "30/30 [==============================] - 2s 73ms/step - loss: 0.7600 - accuracy: 0.6011 - val_loss: 0.7107 - val_accuracy: 0.6230\n",
      "Epoch 3/40\n",
      "30/30 [==============================] - 2s 82ms/step - loss: 0.6541 - accuracy: 0.6561 - val_loss: 0.6263 - val_accuracy: 0.6662\n",
      "Epoch 4/40\n",
      "30/30 [==============================] - 2s 70ms/step - loss: 0.5864 - accuracy: 0.6953 - val_loss: 0.5818 - val_accuracy: 0.6978\n",
      "Epoch 5/40\n",
      "30/30 [==============================] - 2s 77ms/step - loss: 0.5493 - accuracy: 0.7248 - val_loss: 0.5551 - val_accuracy: 0.7190\n",
      "Epoch 6/40\n",
      "30/30 [==============================] - 2s 77ms/step - loss: 0.5222 - accuracy: 0.7452 - val_loss: 0.5336 - val_accuracy: 0.7338\n",
      "Epoch 7/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.4990 - accuracy: 0.7618 - val_loss: 0.5146 - val_accuracy: 0.7477\n",
      "Epoch 8/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.4765 - accuracy: 0.7768 - val_loss: 0.4967 - val_accuracy: 0.7637\n",
      "Epoch 9/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.4551 - accuracy: 0.7925 - val_loss: 0.4798 - val_accuracy: 0.7739\n",
      "Epoch 10/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.4335 - accuracy: 0.8062 - val_loss: 0.4629 - val_accuracy: 0.7864\n",
      "Epoch 11/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.4129 - accuracy: 0.8191 - val_loss: 0.4466 - val_accuracy: 0.7971\n",
      "Epoch 12/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.3915 - accuracy: 0.8315 - val_loss: 0.4309 - val_accuracy: 0.8086\n",
      "Epoch 13/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3710 - accuracy: 0.8431 - val_loss: 0.4159 - val_accuracy: 0.8180\n",
      "Epoch 14/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.3510 - accuracy: 0.8544 - val_loss: 0.4017 - val_accuracy: 0.8262\n",
      "Epoch 15/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.3310 - accuracy: 0.8643 - val_loss: 0.3883 - val_accuracy: 0.8315\n",
      "Epoch 16/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3118 - accuracy: 0.8740 - val_loss: 0.3754 - val_accuracy: 0.8385\n",
      "Epoch 17/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.2932 - accuracy: 0.8846 - val_loss: 0.3638 - val_accuracy: 0.8454\n",
      "Epoch 18/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.2747 - accuracy: 0.8930 - val_loss: 0.3533 - val_accuracy: 0.8495\n",
      "Epoch 19/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.2568 - accuracy: 0.9030 - val_loss: 0.3434 - val_accuracy: 0.8539\n",
      "Epoch 20/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.2396 - accuracy: 0.9094 - val_loss: 0.3360 - val_accuracy: 0.8567\n",
      "Epoch 21/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.2246 - accuracy: 0.9183 - val_loss: 0.3298 - val_accuracy: 0.8605\n",
      "Epoch 22/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.2104 - accuracy: 0.9248 - val_loss: 0.3234 - val_accuracy: 0.8633\n",
      "Epoch 23/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1971 - accuracy: 0.9295 - val_loss: 0.3192 - val_accuracy: 0.8663\n",
      "Epoch 24/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1856 - accuracy: 0.9359 - val_loss: 0.3173 - val_accuracy: 0.8678\n",
      "Epoch 25/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1739 - accuracy: 0.9417 - val_loss: 0.3147 - val_accuracy: 0.8704\n",
      "Epoch 26/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1631 - accuracy: 0.9464 - val_loss: 0.3144 - val_accuracy: 0.8713\n",
      "Epoch 27/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1538 - accuracy: 0.9508 - val_loss: 0.3134 - val_accuracy: 0.8725\n",
      "Epoch 28/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1454 - accuracy: 0.9540 - val_loss: 0.3158 - val_accuracy: 0.8723\n",
      "Epoch 29/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.1372 - accuracy: 0.9573 - val_loss: 0.3174 - val_accuracy: 0.8739\n",
      "Epoch 30/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.1287 - accuracy: 0.9605 - val_loss: 0.3174 - val_accuracy: 0.8748\n",
      "Epoch 31/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1211 - accuracy: 0.9634 - val_loss: 0.3202 - val_accuracy: 0.8752\n",
      "Epoch 32/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.1140 - accuracy: 0.9657 - val_loss: 0.3226 - val_accuracy: 0.8745\n",
      "Epoch 33/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1067 - accuracy: 0.9683 - val_loss: 0.3272 - val_accuracy: 0.8738\n",
      "Epoch 34/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.1001 - accuracy: 0.9707 - val_loss: 0.3323 - val_accuracy: 0.8737\n",
      "Epoch 35/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0934 - accuracy: 0.9734 - val_loss: 0.3352 - val_accuracy: 0.8737\n",
      "Epoch 36/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0871 - accuracy: 0.9761 - val_loss: 0.3403 - val_accuracy: 0.8740\n",
      "Epoch 37/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0817 - accuracy: 0.9788 - val_loss: 0.3449 - val_accuracy: 0.8729\n",
      "Epoch 38/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.0765 - accuracy: 0.9805 - val_loss: 0.3508 - val_accuracy: 0.8739\n",
      "Epoch 39/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0711 - accuracy: 0.9820 - val_loss: 0.3562 - val_accuracy: 0.8738\n",
      "Epoch 40/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0661 - accuracy: 0.9847 - val_loss: 0.3626 - val_accuracy: 0.8728\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(partial_x_train,\n",
    "                    partial_y_train,\n",
    "                    epochs=40,\n",
    "                    batch_size=512,\n",
    "                    validation_data=(x_val, y_val),\n",
    "                    verbose=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "C8cjFPa1uhMA"
   },
   "source": [
    "## Benefits of Early Stopping\n",
    "While we used a validation set, we fit the neural network without early stopping. This dataset is complex enough to allow us to see the benefit of early stopping. We will examine how accuracy and loss progressed for training and validation sets. Loss measures the degree to which the neural network was confident in incorrect answers. Accuracy is the percentage of correct classifications, regardless of the neural network's confidence.\n",
    "\n",
    "We begin by looking at the loss as we fit the neural network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 295
    },
    "id": "sDBXJsl5umJb",
    "outputId": "239a4a13-6564-406b-8e25-104c84dd8446"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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R332y5199tk0b94cgPXr13P++efz73//GzNj+/bt1b7npJNOolWrVrRq1Yr99tuPjz/+mJ49e1YpM3To0N3rBgwYwPLly2nXrh0HHXTQ7uvzx4wZw4wZMzLG99xzz+1ORscddxxr165lw4YNDB8+nCuvvJKxY8dyxhln0LNnT4YMGcKECRPYvn07p512GgMGDKjVsdkbTb5pSETqV332y7Vt23b3/A9+8AOOPfZYFi9ezF//+te019K3atVq93zz5s2r7V/IpUxtTJ48mTvvvJMtW7YwfPhwli5dyogRI5g/fz49evRg/Pjx/Pa3v63Tz8xEiUBE6lS++uXWr19Pjx49AJg5c2ad7//QQw/lnXfeYfny5QDcf//9Wd9zzDHHMCvqHJk3bx5dunShQ4cOvP322/Tt25drrrmGIUOGsHTpUlasWEG3bt248MIL+eY3v8krr7xS598hHSUCEalTY8fCjBlQUgJm4XXGjPibZ6+++mquvfZaBg4cWOe/4AHatGnDbbfdxqhRoxg8eDDt27enY8eOGd8zdepUFixYQL9+/Zg8eTL33HMPALfccgtHHHEE/fr1o6ioiNGjRzNv3jz69+/PwIEDuf/++7nsssvq/Duk0+ieWVxWVuZ6MI1I/XrjjTf4whe+kO8w8m7Tpk20a9cOd+fb3/42Bx98MFdccUW+w9pDdX8vM1vg7mXVlVeNQEQkR3fccQcDBgygT58+rF+/nosuuijfIdWJgrhqSESkLlxxxRUNsgZQW6oRiIgUOCUCEZECp0QgIlLglAhERAqcEoGINHjHHnssjz/+eJV1t9xyC5MmTUr7npEjR5K41PzEE09k3bp1e5SZOnUqN998c8bPnjNnDq+//vru5euvv54nn3xyb8KvVkMarlqJQEQavDFjxjB79uwq62bPnp3TwG8QRg3dZ599avTZqYngpptu4oQTTqjRvhoqJQIRafDOOussHnnkkd0PoVm+fDkffvghxxxzDJMmTaKsrIw+ffpwww03VPv+0tJS1qxZA8C0adM45JBD+OIXv7h7qGoI9wgMGTKE/v37c+aZZ7J582aef/55HnroIa666ioGDBjA22+/zfjx43nwwQcBeOqppxg4cCB9+/ZlwoQJbNu2bffn3XDDDQwaNIi+ffuydOnSjN8v38NVx/nM4ruAk4FV7n5EhnJDgBeAc939wbji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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "history_dict = history.history\n",
    "acc = history_dict['accuracy']\n",
    "val_acc = history_dict['val_accuracy']\n",
    "loss = history_dict['loss']\n",
    "val_loss = history_dict['val_loss']\n",
    "\n",
    "epochs = range(1, len(acc) + 1)\n",
    "\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "j2cQ3mocxVgp"
   },
   "source": [
    "We can see that training and validation loss are similar early in the fitting. However, as fitting continues and overfitting sets in, training and validation loss diverge from each other. Training loss continues to fall consistently. However, once overfitting happens, the validation loss no longer falls and eventually begins to increase a bit. Early stopping, which we saw earlier in this course, can prevent some overfitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 295
    },
    "id": "hU02g4gjumJb",
    "outputId": "125c6e89-6571-477a-94e5-25173bcf8380"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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koq63nQF6pnTmGXzCWUikkNqGvc+lQbbpUt3Xl9RvVNx4k407n5JiU7u2aISQRoce+yxPPfcczssu/POOxk3blzCzwwZMoTS0lIATjnlFNauXbvTNuPHj6/sz5/ItGnTKoeJALjhhht48cUXaxO+FJD6XPGrZ07+UiJIg9GjRzNlypQdlk2ZMiXheD/VTZ8+nd13371O3109Edx8882ccMIJddqX5Lf6NOZCehpsJTcpEaTBGWecwd/+9rfKcXuWLFnCZ599xtFHH824ceMYMGAABx98MDfeeGPcz3fr1o0vv/wSgAkTJtC9e3eOOuqoyqGqIdwjcNhhh9G7d2++/e1vs3HjRv75z3/y1FNPceWVV9KnTx8WL17MmDFjeOKJJwCYOXMmffv2pVevXlxwwQVs3ry58vtuvPFG+vXrR69evViwYMFOMWm46sYr0VV/fa/4VY+fv/KujeDyy+Htt9O7zz594M47E69v164dAwcOZMaMGQwfPpwpU6bwne98BzNjwoQJtGvXju3bt3P88cfz7rvvcuihh8bdz1tvvcWUKVN4++232bZtG/369aN///4AjBw5kgsvvBCAn/70p9x3331ceumlDBs2jNNOO40zzjhjh32VlZUxZswYZs6cSffu3TnvvPP43e9+x+WXXw5A+/btmTNnDvfccw+33XYbf/zjH3f4fMeOHXnhhRdo0aIFH374IaNHj6a0tJQZM2bw17/+lTfeeIOioiK++uorAEpKSrjmmmsYMWIEZWVllJeX1+lYS/0kq+dP5Yo/9rMQv2pHJ/f8oxJBmsRWD8VWC02dOpV+/frRt29f5s2bt0M1TnWvvvoqI0aMoKioiN12241hw4ZVrps7dy5HH300vXr1YvLkyQmHsa6wcOFC9t13X7p37w7A+eefzyuvvFK5fuTIkQD079+/cqC6WBquunFKdtWfjit+yU95VyJIduWeScOHD+eKK65gzpw5bNy4kf79+/Pxxx9z2223MXv2bPbYYw/GjBmTcPjpmowZM4Zp06bRu3dvHnzwQWbNmlWveCuGsk40jHXscNXl5eW0aNGiXt8n6VMxJEO8njfJrvofflhX/BKfSgRp0rp1a4499lguuOCCytLA119/TatWrWjbti0rVqxgxowZSfdxzDHHMG3aNDZt2sT69et5+umnK9etX7+effbZh61btzI5pqtH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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.clf()   # clear figure\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "BagkzLu4yxyC"
   },
   "source": [
    "The accuracy graph tells a similar story. Now let's repeat the fitting with early stopping. We begin by creating an early stopping monitor and restoring the network's weights to random. Once this is complete, we can fit the neural network with the early stopping monitor enabled."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Kh4uYTcwzEtG",
    "outputId": "15072a6d-b941-452b-db44-c17c78eb668d"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 1.1912 - accuracy: 0.5643 - val_loss: 0.7129 - val_accuracy: 0.6332\n",
      "Epoch 2/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.6202 - accuracy: 0.6749 - val_loss: 0.5862 - val_accuracy: 0.6922\n",
      "Epoch 3/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.5531 - accuracy: 0.7251 - val_loss: 0.5525 - val_accuracy: 0.7208\n",
      "Epoch 4/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.5228 - accuracy: 0.7483 - val_loss: 0.5308 - val_accuracy: 0.7403\n",
      "Epoch 5/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.4981 - accuracy: 0.7671 - val_loss: 0.5106 - val_accuracy: 0.7569\n",
      "Epoch 6/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.4754 - accuracy: 0.7823 - val_loss: 0.4925 - val_accuracy: 0.7690\n",
      "Epoch 7/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.4542 - accuracy: 0.7959 - val_loss: 0.4759 - val_accuracy: 0.7803\n",
      "Epoch 8/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.4342 - accuracy: 0.8089 - val_loss: 0.4619 - val_accuracy: 0.7883\n",
      "Epoch 9/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.4143 - accuracy: 0.8215 - val_loss: 0.4455 - val_accuracy: 0.7998\n",
      "Epoch 10/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3960 - accuracy: 0.8318 - val_loss: 0.4319 - val_accuracy: 0.8090\n",
      "Epoch 11/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3784 - accuracy: 0.8390 - val_loss: 0.4190 - val_accuracy: 0.8166\n",
      "Epoch 12/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3613 - accuracy: 0.8483 - val_loss: 0.4068 - val_accuracy: 0.8237\n",
      "Epoch 13/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.3453 - accuracy: 0.8570 - val_loss: 0.3962 - val_accuracy: 0.8291\n",
      "Epoch 14/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.3301 - accuracy: 0.8644 - val_loss: 0.3861 - val_accuracy: 0.8360\n",
      "Epoch 15/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.3157 - accuracy: 0.8735 - val_loss: 0.3778 - val_accuracy: 0.8366\n",
      "Epoch 16/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.3022 - accuracy: 0.8784 - val_loss: 0.3690 - val_accuracy: 0.8419\n",
      "Epoch 17/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.2888 - accuracy: 0.8866 - val_loss: 0.3612 - val_accuracy: 0.8465\n",
      "Epoch 18/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.2765 - accuracy: 0.8917 - val_loss: 0.3546 - val_accuracy: 0.8500\n",
      "Epoch 19/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.2645 - accuracy: 0.8961 - val_loss: 0.3490 - val_accuracy: 0.8524\n",
      "Epoch 20/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.2533 - accuracy: 0.9024 - val_loss: 0.3436 - val_accuracy: 0.8554\n",
      "Epoch 21/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.2433 - accuracy: 0.9065 - val_loss: 0.3386 - val_accuracy: 0.8567\n",
      "Epoch 22/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.2333 - accuracy: 0.9108 - val_loss: 0.3348 - val_accuracy: 0.8590\n",
      "Epoch 23/40\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.2231 - accuracy: 0.9165 - val_loss: 0.3312 - val_accuracy: 0.8615\n",
      "Epoch 24/40\n",
      "30/30 [==============================] - 1s 50ms/step - loss: 0.2142 - accuracy: 0.9206 - val_loss: 0.3287 - val_accuracy: 0.8630\n",
      "Epoch 25/40\n",
      "30/30 [==============================] - 1s 48ms/step - loss: 0.2054 - accuracy: 0.9247 - val_loss: 0.3264 - val_accuracy: 0.8639\n",
      "Epoch 26/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1972 - accuracy: 0.9299 - val_loss: 0.3247 - val_accuracy: 0.8660\n",
      "Epoch 27/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.1891 - accuracy: 0.9327 - val_loss: 0.3225 - val_accuracy: 0.8668\n",
      "Epoch 28/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.1818 - accuracy: 0.9354 - val_loss: 0.3231 - val_accuracy: 0.8656\n",
      "Epoch 29/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1746 - accuracy: 0.9384 - val_loss: 0.3208 - val_accuracy: 0.8685\n",
      "Epoch 30/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.1671 - accuracy: 0.9419 - val_loss: 0.3203 - val_accuracy: 0.8694\n",
      "Epoch 31/40\n",
      "30/30 [==============================] - 1s 36ms/step - loss: 0.1605 - accuracy: 0.9445 - val_loss: 0.3210 - val_accuracy: 0.8688\n",
      "Epoch 32/40\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.1539 - accuracy: 0.9480 - val_loss: 0.3209 - val_accuracy: 0.8699\n",
      "Epoch 33/40\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.1475 - accuracy: 0.9508 - val_loss: 0.3220 - val_accuracy: 0.8700\n",
      "Epoch 34/40\n",
      "29/30 [============================>.] - ETA: 0s - loss: 0.1419 - accuracy: 0.9528Restoring model weights from the end of the best epoch: 29.\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.1414 - accuracy: 0.9531 - val_loss: 0.3231 - val_accuracy: 0.8704\n",
      "Epoch 00034: early stopping\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.callbacks import EarlyStopping\n",
    "\n",
    "monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, \n",
    "        patience=5, verbose=1, mode='auto',\n",
    "        restore_best_weights=True)\n",
    "\n",
    "model.set_weights(init_weights)\n",
    "\n",
    "history = model.fit(partial_x_train,\n",
    "                    partial_y_train,\n",
    "                    epochs=40,\n",
    "                    batch_size=512,\n",
    "                    callbacks=[monitor],\n",
    "                    validation_data=(x_val, y_val),\n",
    "                    verbose=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "pQsyC5VHmfuX"
   },
   "source": [
    "The training history chart is now shorter because we stopped earlier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 295
    },
    "id": "hyQUkk1kz22U",
    "outputId": "d0651549-b9b0-4d67-e917-27a08e509a41"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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uOKKK/jwww8xM3bu3JnwPeeeey4NGzakYcOGHHbYYXz55Ze0aVN29Prxxx+/t6xnz56sWrWKgoICOnbsuHd8/rBhw5g6dWqF8b3yyit7k9H3v/991q9fz6ZNm+jfvz833ngjxcXFDB06lDZt2tC3b19GjhzJzp07Of/88+nZs+cBHZuqyPqoIRGpXaqzX65JkyZ7n//85z9n4MCBvPfeezz11FNJx9I3bNhw7/O6desm7F9IZZsDMW7cOO677z62bdtG//79Wb58Oaeeeirz58+ndevWjBgxgkceSXYtbvopEYhIWmWrX+6bb76hdevWADz00ENp33/nzp1ZuXIlq1atAmDGjBmVvueUU05hWtQ5Mm/ePFq2bMnBBx/MRx99RLdu3bjlllvo27cvy5cvZ/Xq1Rx++OFcffXVXHXVVSxatCjt3yEZJQIRSaviYpg6Fdq3B7PwOHVq5ptnb775Zm699VZ69eqV9l/wAAcddBD33HMPZ599Nn369KFp06Y0a9aswvdMnDiRhQsX0r17d8aNG8fDDz8MwF133cVxxx1H9+7dqV+/PoMGDWLevHn06NGDXr16MWPGDH7yk5+k/TskU+PuWVxUVOS6MY1I9Xr//fc55phjsh1G1m3ZsoWCggLcnWuvvZajjz6asWPHZjusfST6e5nZQncvSrS9agQiIin64x//SM+ePenatSvffPMN11xzTbZDSou8GDUkIpIOY8eOzckawIFSjUBEJM8pEYiI5DklAhGRPKdEICKS55QIRCTnDRw4kNmzZ5cpu+uuuxgzZkzS9wwYMIDYUPNzzjmHjRs37rPNxIkTmTx5coWfPWvWLJYtW7Z3/fbbb2fOnDlVCT+hXJquWolARHLesGHDmD59epmy6dOnpzTxG4RZQw855JD9+uzyieDOO+/kjDPO2K995SolAhHJeRdddBHPPPPM3pvQrFq1is8//5xTTjmFMWPGUFRURNeuXZkwYULC9xcWFrJu3ToAJk2aRKdOnTj55JP3TlUN4RqBvn370qNHDy688EK2bt3Ka6+9xpNPPslNN91Ez549+eijjxgxYgRPPPEEAC+88AK9evWiW7dujBw5ku+++27v502YMIHevXvTrVs3li9fXuH3y/Z01bqOQESq5Kc/hcWL07vPnj3hrruSv968eXOOP/54nnvuOYYMGcL06dO55JJLMDMmTZpE8+bN2b17N6effjpLliyhe/fuCfezcOFCpk+fzuLFi9m1axe9e/emT58+AAwdOpSrr74agH//93/n/vvv5/rrr2fw4MGcd955XHTRRWX2tX37dkaMGMELL7xAp06dGD58OPfeey8//elPAWjZsiWLFi3innvuYfLkydx3331Jv1+2p6tWjUBEaoT45qH4ZqGZM2fSu3dvevXqxdKlS8s045T38ssvc8EFF9C4cWMOPvhgBg8evPe19957j1NOOYVu3boxbdo0li5dWmE8H3zwAR06dKBTp04AXHHFFcyfP3/v60OHDgWgT58+eyeqS+aVV17h8ssvBxJPVz1lyhQ2btxIvXr16Nu3Lw8++CATJ07k3XffpWnTphXuOxWqEYhIlVT0yz2ThgwZwtixY1m0aBFbt26lT58+fPzxx0yePJm33nqLQw89lBEjRiSdfroyI0aMYNasWfTo0YOHHnqIefPmHVC8samsD2Qa63HjxnHuuefy7LPP0r9/f2bPnr13uupnnnmGESNGcOONNzJ8+PADilU1AhGpEQoKChg4cCAjR47cWxvYtGkTTZo0oVmzZnz55Zc899xzFe7j1FNPZdasWWzbto3Nmzfz1FNP7X1t8+bNHHnkkezcuXPv1NEATZs2ZfPmzfvsq3PnzqxatYoVK1YA8Kc//YnTTjttv75btqerVo1ARGqMYcOGccEFF+xtIopN29ylSxfatm1L//79K3x/7969ufTSS+nRoweHHXYYffv23fvaL37xC/r160erVq3o16/f3pP/ZZddxtVXX82UKVP2dhIDNGrUiAcffJCLL76YXbt20bdvX0aPHr3PZ6Yidi/l7t2707hx4zLTVc+dO5c6derQtWtXBg0axPTp0/ntb39L/fr1KSgoSMsNbDQNtYhUStNQ1yyahlpERKpEiUBEJM8pEYhISmpaM3K+2p+/kxKBiFSqUaNGrF+/Xskgx7k769evp1GjRlV6n0YNiUil2rRpQ0lJCWvXrs12KFKJRo0a0aZNmyq9R4lARCpVv359OnTokO0wJEPUNCQikueUCERE8pwSgYhInstYIjCzB8zsKzN7L8nrZmZTzGyFmS0xs96ZikVERJLLZI3gIeDsCl4fBBwdLaOAezMYi4iIJJGxRODu84ENFWwyBHjEgzeAQ8zsyEzFIyIiiWWzj6A18GnceklUtg8z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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "history_dict = history.history\n",
    "acc = history_dict['accuracy']\n",
    "val_acc = history_dict['val_accuracy']\n",
    "loss = history_dict['loss']\n",
    "val_loss = history_dict['val_loss']\n",
    "\n",
    "epochs = range(1, len(acc) + 1)\n",
    "\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "U8CoFEPUmpPO"
   },
   "source": [
    "Finally, we evaluate the accuracy for the best neural network before early stopping occured."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ccmjDt8KkBgF",
    "outputId": "58cc12d6-0016-447c-80c7-e3185f601618"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.8685\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "import numpy as np\n",
    "\n",
    "pred = model.predict(x_val)\n",
    "# Use 0.5 as the threshold\n",
    "predict_classes = pred.flatten()>0.5\n",
    "\n",
    "correct = accuracy_score(y_val,predict_classes)\n",
    "print(f\"Accuracy: {correct}\")"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "anaconda-cloud": {},
  "colab": {
   "collapsed_sections": [],
   "name": "Copy of new_t81_558_class_09_3_transfer_nlp.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3.9 (tensorflow)",
   "language": "python",
   "name": "tensorflow"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "00dee0c787d34cf0ab4a12cdb329f2c9": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "053b0bb917ae40fd93d94628f9e4bf93": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "07713e5d0b1b445fb54ec157515290e5": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "0ab842882b1747c6a3ea9aea15af51bd": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "0bd507d7c5314685a633b0d943b69ef9": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "0e3b1f7050384e06a8133567454c4755": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_3f115b753fbb4df592e6e2896e1a9db1",
      "placeholder": "​",
      "style": "IPY_MODEL_0bd507d7c5314685a633b0d943b69ef9",
      "value": " 24999/25000 [00:00&lt;00:00, 114381.66 examples/s]"
     }
    },
    "1480c7e9c3d64a84b7f755b014a2dc82": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "14d2cfab95cd4574af407dd6600034d0": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5830dc8fecc340c4be3d8b4bfb0cb8eb",
      "placeholder": "​",
      "style": "IPY_MODEL_e29ed19ced0946658859bf32d2b9a25e",
      "value": " 49999/50000 [00:00&lt;00:00, 176308.36 examples/s]"
     }
    },
    "19c696982b944a7a906231251992e58a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "1a236aef271f4dda9cf63c01461affe9": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "265c02017e2046bba839f947d5f20b25": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "279c293b01a846118b31684e451c3499": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_f032e8ac2dee4378a70a31a7c3b3a9f7",
       "IPY_MODEL_4efb5ba39ffb4732b42b069144179a6b",
       "IPY_MODEL_624b0078167b4d6684fd8dc8eecf1d9e"
      ],
      "layout": "IPY_MODEL_cc43585368b442fcaf26c12de4fc14b2"
     }
    },
    "2c8c0e6f3bb64c23beb27885f64ea306": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "2c9f13d821f44cae9257bdb4659cdf0e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "2cf1271ff0c14289a7a3501e9b6061d1": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a87fe8137d4e4eca8c0ebb71ac861292",
      "placeholder": "​",
      "style": "IPY_MODEL_ad3b2411e5ff405696a38013c4a10f9e",
      "value": "100%"
     }
    },
    "30ad7760769f4042a00c07ceeae9f89c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "info",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c5f0ebd1c8f84ae39cd8bb12f2f99a0d",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_8a0cb9329d39408b833344e751f5a762",
      "value": 1
     }
    },
    "342c8ecc48764a19a7d84fca7cfd8b0c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_98cd785afad840fd8cbbf73c58bb6951",
       "IPY_MODEL_4bf007c0b80e4c7f8139bdcf3009b26b",
       "IPY_MODEL_6543a3160a9c4980a9cd2ce87e38010b"
      ],
      "layout": "IPY_MODEL_c187a8615f9f482d8c4ba206ba1a9634"
     }
    },
    "3779841513a8455da892b6f396e7025c": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "377b30cf2b56445682d4e0ec9f2992c8": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "3d19b848e4a54a198db10c2000748513": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e3cfe2f474b0471fa7b6d410d3b340d8",
      "placeholder": "​",
      "style": "IPY_MODEL_0ab842882b1747c6a3ea9aea15af51bd",
      "value": " 24999/25000 [00:00&lt;00:00, 118838.50 examples/s]"
     }
    },
    "3f115b753fbb4df592e6e2896e1a9db1": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4098c7a311b6424e84d9cd4ad30f51fe": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "49b87a6af932494aaeb4bb8eb06ded2b": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4bf007c0b80e4c7f8139bdcf3009b26b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_b96b9d778cee45699e570583eb38e17f",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_1480c7e9c3d64a84b7f755b014a2dc82",
      "value": 1
     }
    },
    "4ddcac6e75a7443396149c931ce4f3b3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_87d16d7a0daa4fae837deb6b81da28e4",
       "IPY_MODEL_fca2e9f85258474a8184ee19038dbce1",
       "IPY_MODEL_3d19b848e4a54a198db10c2000748513"
      ],
      "layout": "IPY_MODEL_377b30cf2b56445682d4e0ec9f2992c8"
     }
    },
    "4efb5ba39ffb4732b42b069144179a6b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "info",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a95f333d2866430a8eb5618b379ced7e",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_5aa17e58b6fc4f52b27493bffbbacd66",
      "value": 1
     }
    },
    "5102002f3d2947d1b85cbc85a6e0d3d0": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "511354020ece429baf3b9c3f0be0d573": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "5830dc8fecc340c4be3d8b4bfb0cb8eb": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "59fd2e3ce54f42dd97aa95044bc99609": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "5a5daadffc8642d28cb3875f78513271": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_a634268e92eb4776aeaf223630411515",
       "IPY_MODEL_cab71e8bb88b4a2ab0fb4d65b3800fe3",
       "IPY_MODEL_8bf75a35229f48bea7786ce024330d44"
      ],
      "layout": "IPY_MODEL_d665aedd6a1c4e12a312ebadf482dc00"
     }
    },
    "5aa17e58b6fc4f52b27493bffbbacd66": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "624b0078167b4d6684fd8dc8eecf1d9e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_f741b500a0d7401497d3ebb61b90d935",
      "placeholder": "​",
      "style": "IPY_MODEL_4098c7a311b6424e84d9cd4ad30f51fe",
      "value": " 49909/0 [00:18&lt;00:00, 3739.36 examples/s]"
     }
    },
    "624ebbef587d47a7916432035e7666b6": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_aeb824b882c4461b89074fe0b90b6f28",
       "IPY_MODEL_8b80de00f12549dd8e195db716240a70",
       "IPY_MODEL_14d2cfab95cd4574af407dd6600034d0"
      ],
      "layout": "IPY_MODEL_511354020ece429baf3b9c3f0be0d573"
     }
    },
    "652ddaffcf734c43964acfbae8cfebf6": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6543a3160a9c4980a9cd2ce87e38010b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_f702e622ee004e9591ac90ef231a1533",
      "placeholder": "​",
      "style": "IPY_MODEL_8fb2bcd3e9724845bfaf5c39b79a5651",
      "value": " 1/1 [00:09&lt;00:00,  9.10s/ url]"
     }
    },
    "6b0946b06bc0428e8ae91155fa4a482a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_2cf1271ff0c14289a7a3501e9b6061d1",
       "IPY_MODEL_98f8cc568f544a579918de572117f58d",
       "IPY_MODEL_0e3b1f7050384e06a8133567454c4755"
      ],
      "layout": "IPY_MODEL_b0311cb873e64621ac45d6a49cc3a925"
     }
    },
    "700fbe90ea7f4e028e1d0698ecdb560c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "77a0ba08a0694993b1b72cfed85ce109": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "78c16501daf448f68db6acd6ac22fe44": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_e1b7df5aabda4edb86db4a69db783dee",
       "IPY_MODEL_30ad7760769f4042a00c07ceeae9f89c",
       "IPY_MODEL_e291af334c514f50ba45bca5a3fb2356"
      ],
      "layout": "IPY_MODEL_9adf83e3d28f457ebaeac6f74a817585"
     }
    },
    "799f38528b7b4236b6624591ed66002c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "87d16d7a0daa4fae837deb6b81da28e4": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_b5122c9a2b494c77992c65b5246ea9a0",
      "placeholder": "​",
      "style": "IPY_MODEL_2c9f13d821f44cae9257bdb4659cdf0e",
      "value": "100%"
     }
    },
    "8a0cb9329d39408b833344e751f5a762": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "8b80de00f12549dd8e195db716240a70": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "danger",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a6ec6e5c93224c65b03a200d36395c6d",
      "max": 50000,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_9793d24e39a04dcc8c43df759ef2a69f",
      "value": 49999
     }
    },
    "8bf75a35229f48bea7786ce024330d44": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_59fd2e3ce54f42dd97aa95044bc99609",
      "placeholder": "​",
      "style": "IPY_MODEL_053b0bb917ae40fd93d94628f9e4bf93",
      "value": " 80/80 [00:09&lt;00:00, 18.47 MiB/s]"
     }
    },
    "8e83f3c6a0624551b9209b0ef0a5376d": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "8fb2bcd3e9724845bfaf5c39b79a5651": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "9793d24e39a04dcc8c43df759ef2a69f": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "98cd785afad840fd8cbbf73c58bb6951": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c88defd020874e348f87c75bc649c291",
      "placeholder": "​",
      "style": "IPY_MODEL_799f38528b7b4236b6624591ed66002c",
      "value": "Dl Completed...: 100%"
     }
    },
    "98f8cc568f544a579918de572117f58d": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "danger",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5102002f3d2947d1b85cbc85a6e0d3d0",
      "max": 25000,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_dbfb59fb47ba4bff87fc82adc4df6ee5",
      "value": 24999
     }
    },
    "9adf83e3d28f457ebaeac6f74a817585": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "9e43efc152af43fcbc9b7b84f89ae912": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "a634268e92eb4776aeaf223630411515": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_07713e5d0b1b445fb54ec157515290e5",
      "placeholder": "​",
      "style": "IPY_MODEL_652ddaffcf734c43964acfbae8cfebf6",
      "value": "Dl Size...: 100%"
     }
    },
    "a6ec6e5c93224c65b03a200d36395c6d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a788ecbf05914d3ba723c3e36a70aba7": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "a87fe8137d4e4eca8c0ebb71ac861292": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a95f333d2866430a8eb5618b379ced7e": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "ad3b2411e5ff405696a38013c4a10f9e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "aeb824b882c4461b89074fe0b90b6f28": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_2c8c0e6f3bb64c23beb27885f64ea306",
      "placeholder": "​",
      "style": "IPY_MODEL_700fbe90ea7f4e028e1d0698ecdb560c",
      "value": "100%"
     }
    },
    "b0311cb873e64621ac45d6a49cc3a925": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "b25a6e97092f4752bccccfbb5d2ffbba": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "info",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_3779841513a8455da892b6f396e7025c",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_da1193435b104e139b8de27384ab5a07",
      "value": 1
     }
    },
    "b31589e904ba48e3868d59795e28f7ff": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "b5122c9a2b494c77992c65b5246ea9a0": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "b96b9d778cee45699e570583eb38e17f": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "bb9f2e95f6a24860b56544727377a981": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "bc45332b60ab4df8a57e17e7a0aeefa7": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c187a8615f9f482d8c4ba206ba1a9634": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c5f0ebd1c8f84ae39cd8bb12f2f99a0d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": "20px"
     }
    },
    "c88defd020874e348f87c75bc649c291": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "cab71e8bb88b4a2ab0fb4d65b3800fe3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_a788ecbf05914d3ba723c3e36a70aba7",
      "max": 1,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_19c696982b944a7a906231251992e58a",
      "value": 1
     }
    },
    "cc43585368b442fcaf26c12de4fc14b2": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ce9542b8402444b7b82f51033bc0c286": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_ebe04996d21b48f6aba2e4e178121c5b",
       "IPY_MODEL_b25a6e97092f4752bccccfbb5d2ffbba",
       "IPY_MODEL_e52b23daab5c4a289e37a7d07ce10125"
      ],
      "layout": "IPY_MODEL_bb9f2e95f6a24860b56544727377a981"
     }
    },
    "d665aedd6a1c4e12a312ebadf482dc00": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "da1193435b104e139b8de27384ab5a07": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "dbfb59fb47ba4bff87fc82adc4df6ee5": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "e1b7df5aabda4edb86db4a69db783dee": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_eb956c443ed84f5199572acab1a73b74",
      "placeholder": "​",
      "style": "IPY_MODEL_9e43efc152af43fcbc9b7b84f89ae912",
      "value": ""
     }
    },
    "e291af334c514f50ba45bca5a3fb2356": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_49b87a6af932494aaeb4bb8eb06ded2b",
      "placeholder": "​",
      "style": "IPY_MODEL_265c02017e2046bba839f947d5f20b25",
      "value": " 24807/0 [00:09&lt;00:00, 3492.16 examples/s]"
     }
    },
    "e29ed19ced0946658859bf32d2b9a25e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "e3cfe2f474b0471fa7b6d410d3b340d8": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e52b23daab5c4a289e37a7d07ce10125": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_b31589e904ba48e3868d59795e28f7ff",
      "placeholder": "​",
      "style": "IPY_MODEL_00dee0c787d34cf0ab4a12cdb329f2c9",
      "value": " 24980/0 [00:07&lt;00:00, 3471.75 examples/s]"
     }
    },
    "e71f9481469f45d4a578f1ddf671551c": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "eb956c443ed84f5199572acab1a73b74": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ebe04996d21b48f6aba2e4e178121c5b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e71f9481469f45d4a578f1ddf671551c",
      "placeholder": "​",
      "style": "IPY_MODEL_77a0ba08a0694993b1b72cfed85ce109",
      "value": ""
     }
    },
    "f032e8ac2dee4378a70a31a7c3b3a9f7": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_1a236aef271f4dda9cf63c01461affe9",
      "placeholder": "​",
      "style": "IPY_MODEL_f72d5e4b2ff24d0a808c52be57a78b93",
      "value": ""
     }
    },
    "f702e622ee004e9591ac90ef231a1533": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "f72d5e4b2ff24d0a808c52be57a78b93": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "f741b500a0d7401497d3ebb61b90d935": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "fca2e9f85258474a8184ee19038dbce1": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "danger",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_bc45332b60ab4df8a57e17e7a0aeefa7",
      "max": 25000,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_8e83f3c6a0624551b9209b0ef0a5376d",
      "value": 24999
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
